{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "195b0f24-1f01-4de0-8f4e-87ef7e9bc23b",
   "metadata": {
    "tags": []
   },
   "source": [
    "# 通过推特好友预测关注的热门话题\n",
    "## 前言\n",
    "最近找实习和找工作的过程中遇到不少岗位都要求有“用户画像”的基础，趁着暑期有点时间，试着学习一下相关知识并且做一个相关的项目来练练手，下面记录一下整个过程。\n",
    "\n",
    "“用户画像”(User Profile)，即用户信息标签化，是基于数据挖掘的用户特征提取及需求深度挖掘，是大数据时代围绕“以用户为中心”开展的个性化服务，标签化的模型是从用户社交属性、生活习惯、消费者行为等信息中抽象出来的产物，是用户“特征标签”的集合(引自知乎百科)。我的理解是，用一个向量来量化表示一个人，这个向量包含了我们关心的若干个特征，而这些特征可以与这个人的一些行为密切相关。就像游戏里经常用属性六边形来描述一个人的战斗力一样，我们选取出与战斗最相关的六个特征，比如攻击、防御、敏捷等，再在每个特征维度上用数字来量化，从而精确的描绘出一个人的战斗力，并且在不同个体之间还可以进行比较。那么对于一个用户，我们该用什么特征来对其进行描述呢？这其实得看我们关心用户的哪些行为，如果关心的是用户的投资行为，那么其收入能力、资产价值、风险偏好等可能是更好的特征；如果是关心用户对那些内容更感兴趣，那么其以往的浏览历史，其关注的作者，以及其显性的收藏和喜爱是更好的特征。明确对用户的哪些行为感兴趣，选定可能合适的一些特征之后，就可以按照一定的规则量化的表示出这些特征。但量化的表示出一个用户并不是目的，最终目的肯定是通过这些量化的特征来预测用户的行为。\n",
    "\n",
    "如何进行预测呢？答案从以往的大数据来。我们可以首先凭直觉选定一些可能的特征，或者选取从已有的大数据中观察到的一些特征，建立对目标行为的预测模型，然后用一部分数据来验证我们的模型是否正确。从选定特征到验证模型分两步，第一步是用一部分数据来建立预测模型，也就是确定这些特征变量里哪些更重要，哪些不重要，哪些变量之间如何相互作用。比如用户的投资行为，收入能力、资产价值、风险偏好都会影响用户投资不同理财产品的资金量，但是这三个因素中哪一个影响最大，这就需要用已有的数据来确定。第二部是验证我们的模型，就是把另一部分数据代入到我们的模型中，看我们预测的结果和真实的结果相差大不大，如果差距在我们能容忍的范围内，就说明我们的模型可以接受。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fed17270-20f6-4b64-8637-5d7f7b2250d8",
   "metadata": {},
   "source": [
    "## 项目介绍\n",
    "\n",
    "本项目的数据是Kaggle上的[Twitter Friends](https://www.kaggle.com/hwassner/TwitterFriends)数据集，共有10列变量，40000条记录。40000条记录我不清楚算多还是算少，反正相比我之前在实验室处理过的数据应该算多的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "cd9a04d0-ceae-4646-8192-f658afaf06fe",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "ca19ee27-8601-4cf6-a2c3-549ac2549b95",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>screenName</th>\n",
       "      <th>tags</th>\n",
       "      <th>avatar</th>\n",
       "      <th>followersCount</th>\n",
       "      <th>friendsCount</th>\n",
       "      <th>lang</th>\n",
       "      <th>lastSeen</th>\n",
       "      <th>tweetId</th>\n",
       "      <th>friends</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>\"1969527638\"</td>\n",
       "      <td>\"LlngoMakeEmCum_\"</td>\n",
       "      <td>[ \"#nationaldogday\" ]</td>\n",
       "      <td>\"http://pbs.twimg.com/profile_images/534286217...</td>\n",
       "      <td>319</td>\n",
       "      <td>112</td>\n",
       "      <td>\"en\"</td>\n",
       "      <td>1472271687519</td>\n",
       "      <td>\"769310701580083200\"</td>\n",
       "      <td>[ \"1969574754\", \"1969295556\", \"1969284056\", \"1...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>\"51878493\"</td>\n",
       "      <td>\"_notmichelle\"</td>\n",
       "      <td>[ \"#nationaldogday\" ]</td>\n",
       "      <td>\"http://pbs.twimg.com/profile_images/761977602...</td>\n",
       "      <td>275</td>\n",
       "      <td>115</td>\n",
       "      <td>\"en\"</td>\n",
       "      <td>1472270622663</td>\n",
       "      <td>\"769309490038439936\"</td>\n",
       "      <td>[ \"60789485\", \"2420931980\", \"2899776756\", \"127...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>\"1393409100\"</td>\n",
       "      <td>\"jesseayye\"</td>\n",
       "      <td>[ \"#narcos\" ]</td>\n",
       "      <td>\"http://pbs.twimg.com/profile_images/713282938...</td>\n",
       "      <td>120</td>\n",
       "      <td>107</td>\n",
       "      <td>\"en\"</td>\n",
       "      <td>1472804144409</td>\n",
       "      <td>\"771622623583186944\"</td>\n",
       "      <td>[ \"86868062\", \"19697415\", \"2998836604\", \"45629...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>\"232891415\"</td>\n",
       "      <td>\"MrBrianLloyd\"</td>\n",
       "      <td>[ \"#gloryoutnow\" ]</td>\n",
       "      <td>\"http://pbs.twimg.com/profile_images/133440668...</td>\n",
       "      <td>492</td>\n",
       "      <td>325</td>\n",
       "      <td>\"en\"</td>\n",
       "      <td>1472269186776</td>\n",
       "      <td>\"769308131696467969\"</td>\n",
       "      <td>[ \"361335082\", \"1405248468\", \"24626354\", \"7256...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>\"710130422907207680\"</td>\n",
       "      <td>\"sarahdorat_16\"</td>\n",
       "      <td>[ \"#nationaldogday\" ]</td>\n",
       "      <td>\"http://pbs.twimg.com/profile_images/767180520...</td>\n",
       "      <td>128</td>\n",
       "      <td>218</td>\n",
       "      <td>\"en\"</td>\n",
       "      <td>1472271397356</td>\n",
       "      <td>\"769309769144283137\"</td>\n",
       "      <td>[ \"1571896093\", \"768938323612008448\", \"2548665...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     id         screenName                   tags  \\\n",
       "0          \"1969527638\"  \"LlngoMakeEmCum_\"  [ \"#nationaldogday\" ]   \n",
       "1            \"51878493\"     \"_notmichelle\"  [ \"#nationaldogday\" ]   \n",
       "2          \"1393409100\"        \"jesseayye\"          [ \"#narcos\" ]   \n",
       "3           \"232891415\"     \"MrBrianLloyd\"     [ \"#gloryoutnow\" ]   \n",
       "4  \"710130422907207680\"    \"sarahdorat_16\"  [ \"#nationaldogday\" ]   \n",
       "\n",
       "                                              avatar  followersCount  \\\n",
       "0  \"http://pbs.twimg.com/profile_images/534286217...             319   \n",
       "1  \"http://pbs.twimg.com/profile_images/761977602...             275   \n",
       "2  \"http://pbs.twimg.com/profile_images/713282938...             120   \n",
       "3  \"http://pbs.twimg.com/profile_images/133440668...             492   \n",
       "4  \"http://pbs.twimg.com/profile_images/767180520...             128   \n",
       "\n",
       "   friendsCount  lang       lastSeen               tweetId  \\\n",
       "0           112  \"en\"  1472271687519  \"769310701580083200\"   \n",
       "1           115  \"en\"  1472270622663  \"769309490038439936\"   \n",
       "2           107  \"en\"  1472804144409  \"771622623583186944\"   \n",
       "3           325  \"en\"  1472269186776  \"769308131696467969\"   \n",
       "4           218  \"en\"  1472271397356  \"769309769144283137\"   \n",
       "\n",
       "                                             friends  \n",
       "0  [ \"1969574754\", \"1969295556\", \"1969284056\", \"1...  \n",
       "1  [ \"60789485\", \"2420931980\", \"2899776756\", \"127...  \n",
       "2  [ \"86868062\", \"19697415\", \"2998836604\", \"45629...  \n",
       "3  [ \"361335082\", \"1405248468\", \"24626354\", \"7256...  \n",
       "4  [ \"1571896093\", \"768938323612008448\", \"2548665...  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv(\"./data.csv\", sep = ',(?=\\S)', engine = 'python')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f0981e5a-768f-4698-9196-0cf307e4dbce",
   "metadata": {
    "tags": []
   },
   "source": [
    "上表中展示了部分数据，下面详细描述一下每个变量分别是什么含义。\n",
    "\n",
    "* id：用户id，每个用户一个，独一无二，这里40000条记录的id没有重复，也就是这40000条记录代表40000个用户的数据记录；\n",
    "* screenName：用户名；\n",
    "* tags：用户发布的热门话题(\"trending topic\")，是一个列表，里面包含一个或多个话题；\n",
    "* avatar：用户头像的图片链接；\n",
    "* followersCount：关注当前用户的人的数量；\n",
    "* friendsCount：当前用户关注的人的数量；\n",
    "* lang：当前用户使用的语言；\n",
    "* lastSeen：该用户最后登陆时间的时间戳；\n",
    "* tweetId：该用户发的最后一条推特的id；\n",
    "* friends：当前用户关注的人的用户id，是一个列表，里面有多个或零个推特用户id。\n",
    "\n",
    "俗话说“物以类聚，人以群分”，人们会因为志趣相投从而结交成为好友。反过来思考，能成为好友的人，很大可能也是拥有共同兴趣爱好的人。再换句话说，两个人的朋友圈越接近，这两个人的兴趣爱好也越可能相同。所以本项目的基本假设就是，一个人的兴趣话题和其关注的人存在着一定的关系，我们可以从一个人关注的人来推测其感兴趣的话题。因此，本项目最关注的变量是**id**，**tags**，**friends**。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "61e3d3cd-8c99-4178-b8b3-fd720e81adb8",
   "metadata": {},
   "source": [
    "## 项目实施\n",
    "\n",
    "首先对数据集进行基本的描述，重点是对我们最关注的变量进行描述。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8cb77817-a963-4c65-8698-701aa4c57e00",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 40000 entries, 0 to 39999\n",
      "Data columns (total 10 columns):\n",
      " #   Column          Non-Null Count  Dtype \n",
      "---  ------          --------------  ----- \n",
      " 0   id              40000 non-null  object\n",
      " 1   screenName      40000 non-null  object\n",
      " 2   tags            40000 non-null  object\n",
      " 3   avatar          40000 non-null  object\n",
      " 4   followersCount  40000 non-null  int64 \n",
      " 5   friendsCount    40000 non-null  int64 \n",
      " 6   lang            40000 non-null  object\n",
      " 7   lastSeen        40000 non-null  int64 \n",
      " 8   tweetId         40000 non-null  object\n",
      " 9   friends         40000 non-null  object\n",
      "dtypes: int64(3), object(7)\n",
      "memory usage: 3.1+ MB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "c35e51e1-e062-480b-855c-1da51b6ae350",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>col</th>\n",
       "      <th>types</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>id</td>\n",
       "      <td>&lt;class 'str'&gt;</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>screenName</td>\n",
       "      <td>&lt;class 'str'&gt;</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>tags</td>\n",
       "      <td>&lt;class 'str'&gt;</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>avatar</td>\n",
       "      <td>&lt;class 'str'&gt;</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>followersCount</td>\n",
       "      <td>&lt;class 'numpy.int64'&gt;</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>friendsCount</td>\n",
       "      <td>&lt;class 'numpy.int64'&gt;</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>lang</td>\n",
       "      <td>&lt;class 'str'&gt;</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>lastSeen</td>\n",
       "      <td>&lt;class 'numpy.int64'&gt;</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>tweetId</td>\n",
       "      <td>&lt;class 'str'&gt;</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>friends</td>\n",
       "      <td>&lt;class 'str'&gt;</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              col                  types\n",
       "0              id          <class 'str'>\n",
       "1      screenName          <class 'str'>\n",
       "2            tags          <class 'str'>\n",
       "3          avatar          <class 'str'>\n",
       "4  followersCount  <class 'numpy.int64'>\n",
       "5    friendsCount  <class 'numpy.int64'>\n",
       "6            lang          <class 'str'>\n",
       "7        lastSeen  <class 'numpy.int64'>\n",
       "8         tweetId          <class 'str'>\n",
       "9         friends          <class 'str'>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame({'col':data.columns, 'types':list(map(type, data.iloc[0]))})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "70eb4645-4312-4088-96dc-19fab95f2f11",
   "metadata": {},
   "source": [
    "可以看到，**tags**和**friends**本应是列表，现在读入时却被认为是'str'，所以我们首先对这两个变量进行一下处理。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "8e73e14a-6c94-4f57-a8ca-f467daa7058d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>col</th>\n",
       "      <th>types</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>tags</td>\n",
       "      <td>&lt;class 'list'&gt;</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>friends</td>\n",
       "      <td>&lt;class 'list'&gt;</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       col           types\n",
       "0     tags  <class 'list'>\n",
       "1  friends  <class 'list'>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for col in ['tags', 'friends']:\n",
    "    data[col] = data[col].apply(json.loads) #将这两列由str变为list\n",
    "pd.DataFrame({'col':data[['tags', 'friends']].columns, 'types':list(map(type, data[['tags', 'friends']].iloc[0]))})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "4dfaccff-a4e2-44c7-b2b9-f4ce3a21a81d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>followersCount</th>\n",
       "      <th>friendsCount</th>\n",
       "      <th>lastSeen</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>4.000000e+04</td>\n",
       "      <td>40000.000000</td>\n",
       "      <td>4.000000e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.692349e+03</td>\n",
       "      <td>919.101450</td>\n",
       "      <td>1.472287e+12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>9.136179e+04</td>\n",
       "      <td>3417.849318</td>\n",
       "      <td>1.010296e+08</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.010000e+02</td>\n",
       "      <td>101.000000</td>\n",
       "      <td>1.472249e+12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>2.420000e+02</td>\n",
       "      <td>253.000000</td>\n",
       "      <td>1.472259e+12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>4.400000e+02</td>\n",
       "      <td>423.000000</td>\n",
       "      <td>1.472265e+12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>9.240000e+02</td>\n",
       "      <td>801.000000</td>\n",
       "      <td>1.472270e+12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.476555e+07</td>\n",
       "      <td>238749.000000</td>\n",
       "      <td>1.472808e+12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       followersCount   friendsCount      lastSeen\n",
       "count    4.000000e+04   40000.000000  4.000000e+04\n",
       "mean     3.692349e+03     919.101450  1.472287e+12\n",
       "std      9.136179e+04    3417.849318  1.010296e+08\n",
       "min      1.010000e+02     101.000000  1.472249e+12\n",
       "25%      2.420000e+02     253.000000  1.472259e+12\n",
       "50%      4.400000e+02     423.000000  1.472265e+12\n",
       "75%      9.240000e+02     801.000000  1.472270e+12\n",
       "max      1.476555e+07  238749.000000  1.472808e+12"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3e2fe41b-979e-4cf3-991d-55a9e2bc0687",
   "metadata": {},
   "source": [
    "接下来重点看**tags**和**friends**两个变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "c39d1eff-54a7-48e4-ac77-1c9722315d92",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "所有可能的热门话题的数量为 128 个。\n"
     ]
    }
   ],
   "source": [
    "all_possible_tags = [tag for tag_list in data['tags'] for tag in tag_list ]\n",
    "print('所有可能的热门话题的数量为 %d 个。' % len(set(all_possible_tags)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "5a4a77d9-1ce0-4d54-8233-7209e6464301",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:ylabel='tags'>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.DataFrame({'tags':all_possible_tags}).\\\n",
    "    groupby(['tags']).\\\n",
    "    agg({'tags':'count'}).\\\n",
    "    plot.pie(y = 'tags', figsize = (10,8), legend = False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d31d8fad-1eb2-4034-9ee0-24df67a8f7dc",
   "metadata": {},
   "source": [
    "可以看到，**tags**的比例非常不均匀，绝大多数用户的热门话题都是\"#nationaldogday\"(74.8%)和\"#respecttylerjoseph\"(14.8%)，而其他所有热门话题加起来只占剩下的10.4%。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "68f7eee2-3c39-48d5-ae7a-825e0260dbda",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "该数据集中所有可能用户id的数量为 12917532 个。\n"
     ]
    }
   ],
   "source": [
    "all_possible_ids = [id for id_list in data['friends'] for id in id_list ]\n",
    "print('该数据集中所有可能用户id的数量为 %d 个。' % len(set(all_possible_ids)|set(data['id'])))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2d8c2024-0e44-406a-afa4-f51d1d86c844",
   "metadata": {},
   "source": [
    "可以看到，仅仅40000条记录，其中包含的所有可能的用户id却是惊人的多。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb0bb69f-10d4-4e2e-bb5a-3f361c9e7814",
   "metadata": {
    "tags": []
   },
   "source": [
    "### 方案一\n",
    "\n",
    "基于最朴素的想法，两个人朋友圈越重合，即两个人关注的对象越重合，那么这两个人的兴趣应该也会越像。朋友圈的重合度可以用集合的相似性$J(A,B)={|A \\bigcap B|\\over |A \\bigcup B|}$ 的公式来计算。 我们将数据集分成训练集(20%)和测试集(80%)两个部分，对于测试集中的每一个\"新\"用户，我们在训练集中找出与其朋友圈最相似的\"老\"用户，并用该\"老\"用户对应的热门话题作为我们对这个\"新\"用户感兴趣话题的预测结果。这个方案里，看上去似乎并没有建模这一步，这是因为这里我们只有一个特征，就是**friends**变量所代表的用户所关注的人，所以可以不需要筛选特征这一步骤。其次，**friends**作为离散变量，如果要进行向量化的话应该是用独热编码，但是这里可能的用户id数量有一千万个，进行独热编码不太现实，而且编码后的矩阵肯定很稀疏(大部分都是0)。因此，这里并没有采用进一步的编码和处理，直接用这一个集合作为刻画该用户的特征。最后是在训练集内建立好模型，这里我的模型似乎是有点牵强，就是简单的寻找计算两个用户之间朋友圈的重合度，然后取最大值，但是要想在训练集中说明这个模型的合理性也不是不可以。我们先计算训练集内两两用户之间朋友圈的重合度，这样应该得到32000×32000的数值矩阵A，然后同样用计算集合间相似度的公式计算两两用户之间热门话题的重合度，这样也能得到32000×32000的数值矩阵B(不过大部分都是0和1，因为大部分人只关注一个热门话题，要么一样，要么不一样）。用矩阵B的0值mask取出矩阵A中所有值算出平均值$\\alpha$，用矩阵B的非0值mask取出矩阵A中所有值算出平均值$\\beta$，应有$\\beta$显著高于$\\alpha$。在训练集内验证完之后，就可以用这个模型去预测测试集中用户感兴趣的热门话题，通过看预测的正确率来评判模型。\n",
    "\n",
    "这个方案我倒在了在测试集内计算两两用户之间朋友圈的重合度，这一步需要的内存太大了。无数次因为内存溢出而程序终止。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e003cdb0-b72b-4853-8d78-a37eacd36772",
   "metadata": {},
   "outputs": [],
   "source": [
    "from itertools import product\n",
    "from multiprocessing import Pool\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "train_data, test_data = train_test_split(data, test_size = 0.2)\n",
    "\n",
    "pool = Pool(4)\n",
    "def friends_similarity(t):\n",
    "    friends_intersection = set(t[0])&set(t[1])\n",
    "    friends_union = set(t[1])|set(t[0])\n",
    "    if len(friends_union)==0:\n",
    "        return np.float32(0)\n",
    "    else:\n",
    "        return np.float32(len(friends_intersection)/len(friends_union))\n",
    "        \n",
    "results = pool.map(friends_similarity,product(data['friends'], data['friends']))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e620e383-2688-43dc-ac19-64196cbb61eb",
   "metadata": {},
   "source": [
    "由于样本量太大，一是计算起来特别慢，第二个是内存占用太大。也想过降低精度，或者一次只计算一对用户的相似性，但是发现这效率仍然不理想。尤其是假设放在应用场景中，用户数量甚至不止40000个，要想遍历所有的用户然后找出最相似的朋友圈，根本不现实，最后放弃了这个方案。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "53cd5c51-977f-4bc2-b7df-a9c7c7c90616",
   "metadata": {},
   "source": [
    "### 方案二\n",
    "\n",
    "方案一的失败究其原因我觉得是我选的特征不对，以用户关注的用户集合(即朋友圈)作为特征，一是因为用户id过多而无法进行编码，只能保持列表的形式，导致后续内存占用大计算速度慢。二是这个特征变动太大，没新增一个用户，这个特征的复杂度就会提高一点。所以方案二我直接换了一个特征，换成了**tags**。因为在之前的探索中，我们发现所有可能的tag只有128种，从现实应用考虑，热门话题或者说兴趣的门类都是相对固定的，变动没有那么大，所以用这个作为特征来描绘一个用户是比较好的。对**tags**进行独热编码，最后将是每一个用户对应一个长度为128的01向量。这样，我们对测试集进行编码，将会得到一个32000*128的表。\n",
    "\n",
    "那么问题来了，我们的目标是通过一个人的朋友圈来预测这个人可能感兴趣的话题，现在我们对**tags**是进行编码了，那朋友圈这个变量在哪里体现呢？这个体现在后续的模型里：![方案二示意图](./方案二示意图.png)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ee6a57e-eefc-4e34-95ab-bd56dcea5011",
   "metadata": {},
   "source": [
    "我们以待预测用户的**friends**为索引去测试集中找到相应的**tags**向量，然后将所有的向量加权求和，最后找到最大值所对应的tag，即是我们最终的预测结果。\n",
    "\n",
    "整个模型的代码如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "11a57595-8bfd-49a6-a0f7-89fc686fe335",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "train_data, test_data = train_test_split(data, test_size = 0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "0e5eea64-62e6-40bf-b498-f6b15fe5673e",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import MultiLabelBinarizer\n",
    "mlb = MultiLabelBinarizer()\n",
    "# 把tags转化为01编码的向量\n",
    "onehot_tags = pd.DataFrame(mlb.fit_transform(train_data['tags']), columns=mlb.classes_, index=train_data.index)\n",
    "tags_of_person = train_data[['id']].join(onehot_tags)\n",
    "del onehot_tags\n",
    "# 把friends从一个包含多个id的列表，变成多行的字符串，每一行只包含一个id\n",
    "friends_of_person = train_data[['id','friends']].explode('friends')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "8f3b9824-1b73-4b56-ab28-4c3e98d01fed",
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict_by_friends(friends, known_tags, known_friends):\n",
    "    direct_friends_tags = pd.DataFrame({'friends':friends}, dtype = 'string').\\\n",
    "    merge(known_tags, left_on = 'friends', right_on = 'id')\n",
    "    if not direct_friends_tags is None:\n",
    "        direct_prediction = direct_friends_tags.astype({'friends':'string'}).sum(axis = 0)\n",
    "    else:\n",
    "        direct_prediction = None\n",
    "    indirect_friends = pd.DataFrame({'friends':friends}).merge(known_friends, on = 'friends')\n",
    "    if not indirect_friends is None:\n",
    "        indirect_prediction = indirect_friends.merge(known_tags, on = 'id').\\\n",
    "        astype({'friends':'string'}).\\\n",
    "        sum(axis = 0)\n",
    "    else:\n",
    "        indirect_prediction = None\n",
    "    if direct_prediction is None and indirect_prediction is None:\n",
    "        return \"\"\n",
    "    elif direct_prediction is None:\n",
    "        return indirect_prediction.idxmax()\n",
    "    elif indirect_prediction is None:\n",
    "        return direct_prediction.idxmax()\n",
    "    else :\n",
    "        return (direct_prediction + indirect_prediction*0.5).idxmax()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5822fd88-6054-4cf5-a414-6db1b3eb9bb0",
   "metadata": {},
   "outputs": [],
   "source": [
    "from multiprocessing.dummy import Pool\n",
    "# 把predict_by_friends改写成一个临时函数，因为pool.map不能接受多参数的函数\n",
    "def predict(friends):\n",
    "    return predict_by_friends(friends, tags_of_person, friends_of_person)\n",
    "# 4线程进行预测\n",
    "predict_tags = list(Pool(4).map(predict,test_data['friends']))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7a26c826-1835-4606-b64f-0306d1efea7e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 把预测结果列表作为一列加入数据框，并检查预测结果是否正确\n",
    "# 因为原始数据中tags为一个列表，里面包含一个或多个话题，我们的模型只会给出一个预测结果，所以我们认为只要原始数据中的tags包含我们的预测结果，就算预测正确\n",
    "test_data = test_data.\\\n",
    "    assign(predict_tags = predict_tags,\n",
    "           is_correct = list(map(lambda x, y: x in y, predict_tags, test_data['tags'])))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f86ca7f7-7445-4c93-a12c-ee4ea7c2f03a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 把预测结果保存下来，对整个测试集的预测需要跑大概21个小时，所以把预测结果保存下来避免重新跑，浪费时间。\n",
    "test_data.to_pickle(\"./res_prediction.pkl\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cd35ecb0-4348-4700-954b-d0cd446ad3e3",
   "metadata": {},
   "source": [
    "如果只对少量人进行预测，比如10个人大概需要两分钟的样子，但对整个测试集的8000人进行预测，需要跑大概21个小时(在本地跑，CPU：Intel i7，内存：2×8G)。所以这里不进行实时测评，而是将结果先保存下来再进行后续预测效果的测评。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "733a42f9-c077-43e8-89fb-6321afb97fd1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>screenName</th>\n",
       "      <th>tags</th>\n",
       "      <th>followersCount</th>\n",
       "      <th>friendsCount</th>\n",
       "      <th>lastSeen</th>\n",
       "      <th>friends</th>\n",
       "      <th>predict_tags</th>\n",
       "      <th>is_correct</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12003</th>\n",
       "      <td>\"2536373540\"</td>\n",
       "      <td>\"0932824_\"</td>\n",
       "      <td>[#gloryoutnow]</td>\n",
       "      <td>176</td>\n",
       "      <td>422</td>\n",
       "      <td>1472256379640</td>\n",
       "      <td>[373471064, 450186253, 108775893, 78177660, 76...</td>\n",
       "      <td>#nationaldogday</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23734</th>\n",
       "      <td>\"2205782736\"</td>\n",
       "      <td>\"Quantum_Zombu\"</td>\n",
       "      <td>[#nationaldogday]</td>\n",
       "      <td>109</td>\n",
       "      <td>246</td>\n",
       "      <td>1472262858382</td>\n",
       "      <td>[3375167474, 21896677, 1676327754, 14645160, 3...</td>\n",
       "      <td>#nationaldogday</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25887</th>\n",
       "      <td>\"1090515896\"</td>\n",
       "      <td>\"_zellers\"</td>\n",
       "      <td>[#nationaldogday]</td>\n",
       "      <td>781</td>\n",
       "      <td>547</td>\n",
       "      <td>1472259401961</td>\n",
       "      <td>[503331445, 2365044235, 534353064, 768930708, ...</td>\n",
       "      <td>#nationaldogday</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35612</th>\n",
       "      <td>\"4831473671\"</td>\n",
       "      <td>\"_VyTran_\"</td>\n",
       "      <td>[#nationaldogday]</td>\n",
       "      <td>143</td>\n",
       "      <td>199</td>\n",
       "      <td>1472271502230</td>\n",
       "      <td>[1180655028, 3003647874, 3051005236, 701981266...</td>\n",
       "      <td>#nationaldogday</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16132</th>\n",
       "      <td>\"1135525494\"</td>\n",
       "      <td>\"gabixx27\"</td>\n",
       "      <td>[#respecttylerjoseph]</td>\n",
       "      <td>424</td>\n",
       "      <td>319</td>\n",
       "      <td>1472266916398</td>\n",
       "      <td>[2437766502, 30892730, 2830720945, 957027824, ...</td>\n",
       "      <td>#respecttylerjoseph</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 id       screenName                   tags  followersCount  \\\n",
       "12003  \"2536373540\"       \"0932824_\"         [#gloryoutnow]             176   \n",
       "23734  \"2205782736\"  \"Quantum_Zombu\"      [#nationaldogday]             109   \n",
       "25887  \"1090515896\"       \"_zellers\"      [#nationaldogday]             781   \n",
       "35612  \"4831473671\"       \"_VyTran_\"      [#nationaldogday]             143   \n",
       "16132  \"1135525494\"       \"gabixx27\"  [#respecttylerjoseph]             424   \n",
       "\n",
       "       friendsCount       lastSeen  \\\n",
       "12003           422  1472256379640   \n",
       "23734           246  1472262858382   \n",
       "25887           547  1472259401961   \n",
       "35612           199  1472271502230   \n",
       "16132           319  1472266916398   \n",
       "\n",
       "                                                 friends         predict_tags  \\\n",
       "12003  [373471064, 450186253, 108775893, 78177660, 76...      #nationaldogday   \n",
       "23734  [3375167474, 21896677, 1676327754, 14645160, 3...      #nationaldogday   \n",
       "25887  [503331445, 2365044235, 534353064, 768930708, ...      #nationaldogday   \n",
       "35612  [1180655028, 3003647874, 3051005236, 701981266...      #nationaldogday   \n",
       "16132  [2437766502, 30892730, 2830720945, 957027824, ...  #respecttylerjoseph   \n",
       "\n",
       "       is_correct  \n",
       "12003       False  \n",
       "23734        True  \n",
       "25887        True  \n",
       "35612        True  \n",
       "16132        True  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_data = pd.read_pickle(\"./res_prediction.pkl\")\n",
    "test_data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b71251e1-5ddf-4652-9332-3a4723fbe5cd",
   "metadata": {},
   "source": [
    "注意这里其实相比最开始少了**avatar**，**lang**和**tweetid**这三列，这是因为我最开始的脚本里是把这三列删掉了的，现在文档里并没有这一步删除，但是我也实在不想重跑一遍了。\n",
    "\n",
    "可以看到预测效果看上去还行，前五个里面对了四个。那么接下来看一下总的正确率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "ddf59d98-1e63-49a7-a326-69aa1c379d49",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "总预测正确率为 85.29 %.\n"
     ]
    }
   ],
   "source": [
    "rate_correct = sum(test_data.is_correct)/len(test_data.is_correct)\n",
    "print('总预测正确率为 %.2f %%.' % (rate_correct*100))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ae56f88-aec2-400d-ac61-1c2820034e58",
   "metadata": {},
   "source": [
    "总预测正确率达到85.29%，看上去效果不错，但是从一开始我们就看到，tags的分布比例是非常不均匀的，有74.8%的\"#nationaldogday\"，也就是说，假如我们一股脑的全部都预测为\"#nationaldogday“，我们也有74.8%的正确率，但这个预测就毫无意义了。为了排除这种可能，即正确率高仅仅是因为预测结果中tag分布不均匀，我们对预测结果进行随机打乱，这样各个tag的数量和比例保持不变，变化的是预测结果是否与预测对象正确对应。\n",
    "\n",
    "随机打乱一千次，看一下随机水平下，预测正确率会是多高。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "d8a49e10-3db0-4944-ac53-568b62576c6e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:ylabel='Frequency'>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAD7CAYAAABt0P8jAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAbpklEQVR4nO3deZhU9Z3v8fcXZBEGZetwUYKNiiCkF7CMIJcIKgOJBkEFBUcbJelJRB0zmQhO8mgSnefCvS5IrpOIMYpcFxYHYYx6FQa3QZHFZhFEUNo7jQiIEkGjLH7vH+d02zS9VHXXqSo4n9fz9NNnPx+qi2/96ndO/crcHRERiY9m2Q4gIiKZpcIvIhIzKvwiIjGjwi8iEjMq/CIiMaPCLyISM5EVfjPrZWZl1X4+M7Obzayjmb1oZpvD3x2iyiAiIkeyTNzHb2bNgW3AOcAk4BN3n2pmU4AO7j458hAiIgJkrvD/LXC7uw8ys03AEHffbmZdgZfcvVd9+3fu3Nnz8/MjzykicixZtWrVx+6eV3P5cRk6/5XAE+F0F3ffHk5/BHSpbQczKwVKAbp3787KlSsjDykiciwxsw9qWx75xV0zawmMBObVXOfB241a33K4+0x3T7h7Ii/viBcsERFppEzc1fN9YLW77wjnd4RdPIS/d2Ygg4iIhDJR+MfxTTcPwCKgJJwuARZmIIOIiIQi7eM3s7bAMODvqy2eCsw1s4nAB8DYKDOIHK0OHDhARUUFX375ZbajSI5r3bo13bp1o0WLFkltH2nhd/fPgU41lu0GLojyvCLHgoqKCtq1a0d+fj5mlu04kqPcnd27d1NRUUGPHj2S2kef3BXJUV9++SWdOnVS0Zd6mRmdOnVK6Z2hCr9IDlPRl2Sk+jxR4RcRiZlMfYBLRJoof8qf03q88qkXpfV4cvRQ4RdpgrqKcdyK6vTp0yktLaVNmzbZjsKECRO4+OKLufzyy7MdJa3Ky8tZtmwZ48ePb/Kx1NUjIklxd77++uta102fPp0vvviiyec4dOhQk4+Rqw4ePFjvfEPKy8t5/PHH05JFhV9E6lReXk6vXr245ppr+M53vsPEiRNJJBL07duX22+/HYAZM2bw4YcfMnToUIYOHQrACy+8wMCBA+nfvz9jxoxh3759dZ4jPz+fyZMn079/f+bNm8eDDz7I2WefTVFREZdddlnVC8qECRO46aabOPfcczn11FOZP38+ELwg3XDDDfTq1YsLL7yQnTu/GQxgyZIl9OvXj4KCAq677jq++uqrqnPeeuutFBcXk0gkWL16NcOHD+e0007jD3/4Q72PybRp0ygoKKCoqIgpU6YAUFZWxoABAygsLGT06NF8+umnAAwZMoSbb76ZRCLBfffdd8T8qlWrOO+88zjrrLMYPnw427cHw5ht2bKFCy+8kKKiIvr37897773HlClTePXVVykuLubee+9N+W9ZnQq/iNRr8+bNXH/99bz99tvcfffdrFy5krVr1/Lyyy+zdu1abrrpJk466SSWLl3K0qVL+fjjj7nzzjtZvHgxq1evJpFIcM8999R7jk6dOrF69WquvPJKLr30UlasWMGaNWs488wzeeihh6q22759O6+99hrPPPNMVdFdsGABmzZtYsOGDTz66KMsW7YMCG6HnTBhAnPmzGHdunUcPHiQ3//+91XH6t69O2VlZQwePJgJEyYwf/583njjjaoXtNo899xzLFy4kOXLl7NmzRpuueUWAK655hqmTZvG2rVrKSgo4De/+U3VPvv372flypX8/Oc/P2z+pptu4sYbb2T+/PmsWrWK6667jl/+8pcAXHXVVUyaNIk1a9awbNkyunbtytSpUxk8eDBlZWX87Gc/S+VPeAT18YtIvU455RQGDBgAwNy5c5k5cyYHDx5k+/btbNiwgcLCwsO2f+ONN9iwYQODBg0CgkI3cODAes9xxRVXVE2vX7+eX/3qV+zZs4d9+/YxfPjwqnWjRo2iWbNm9OnThx07guG/XnnlFcaNG0fz5s056aSTOP/88wHYtGkTPXr04IwzzgCgpKSE+++/n5tvvhmAkSNHAlBQUMC+ffto164d7dq1o1WrVuzZs4f27dsfkXPx4sVce+21VdcyOnbsyF/+8hf27NnDeeedV3WeMWPG1Ppvqz6/adMm1q9fz7Bhw4Cgm6tr167s3buXbdu2MXr0aCD4VG66qfCLSL3atm0LwNatW7nrrrtYsWIFHTp0YMKECbV+aMjdGTZsGE888cQR6xo6BwRdOk8//TRFRUU88sgjvPTSS1XrWrVqddh5mqLyWM2aNTvsuM2aNUu5/70+1f9t1efdnb59+/L6668ftn7v3r1pO3ddVPhFjhLZvlPos88+o23btpx44ons2LGD5557jiFDhgDQrl07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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import random\n",
    "\n",
    "rate_random_correct = []\n",
    "random_predict_tags = list(test_data.predict_tags.copy())\n",
    "for i in range(1000):\n",
    "    random.shuffle(random_predict_tags)\n",
    "    rate_random_correct.append(sum(list(map(lambda x, y: x in y, random_predict_tags, test_data['tags'])))/len(test_data['tags']))\n",
    "    \n",
    "pd.DataFrame({'rate_random_correct':rate_random_correct}).\\\n",
    "    plot.hist(bins = 50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "ae88533e-2548-4a0f-bc63-7a4fe8c3261d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "随机水平下，预测正确率平均值为 70.62 %, 预测正确率最大值为 71.46 %.\n"
     ]
    }
   ],
   "source": [
    "print('随机水平下，预测正确率平均值为 %.2f %%, 预测正确率最大值为 %.2f %%.' % (sum(rate_random_correct)/len(rate_random_correct)*100, max(rate_random_correct)*100))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "861ed236-456a-48c1-9dfe-494c56f4fbea",
   "metadata": {},
   "source": [
    "可以看到，我们的模型的正确率远高于随机水平，说明我们的模型确实具有一定的预测效果。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "13174626-dfac-4def-bfd4-2dc7a2427d24",
   "metadata": {},
   "source": [
    "## 总结与反思\n",
    "\n",
    "这是我第一次尝试做用户画像，毕竟没有人可以请教，完全是凭感觉做的，所以有点粗糙。甚至我都不知道我这个能不能算用户画像，还是就是一个天马行空的预测模型。虽然最后确实有一定的预测效果，这个预测模型算是成功了，但是总觉得这个模型和我想象中的用户画像不太一样。按我的理解，用户画像是能够用一个向量把这个用户的量化，标签化，之后就可以根据这个向量来预测这个用户的行为。按照这个标准，我这里的用户画像应该是倒数第二步把直接tag和间接tag加权求和之后的向量，但这个太过于依赖于训练集，也就是已有数据库里面的数据，跟我想的可以相对独立的从一个用户自己的行为数据抽象出一些指标形成一个向量不太一样。所以我不知道这算不算用户画像。\n",
    "\n",
    "另外一个问题就是，这个预测模型太过草率，直接tag和间接tag加权求和的权重完全是我一拍脑门，觉得直接tag是“朋友的tag”，更可靠，权重应该高一点；间接tag是“朋友的朋友的tag”，有一层推断在，更没那么靠谱，权重应该低一点，所以一个设为1一个设为0.5。这个权重最靠谱的应该是用训练集的数据来进行机器学习得到，甚至不同tag的权重也可以不同(现在是认为等同，全为1)，因为可能有些话题更具有煽动性和群体性，所以两个朋友之间更可能共享话题，而有些话题本身不具有煽动性和群体性，即使两个人是朋友也不一定要共享这个话题。比如一个全国性的“建党100周年”话题和一个湖南省内的“烟花节”，显然前者这个话题的“传递性”更强，“传递范围”更广。但仅仅是对测试机8000个人进行预测就花了接近一天的时间，如果要对训练集32000个人来进行机器学习，那我这台小电脑可能会有一段时间做不了其他事情了，万一导师有活儿可咋办？后面还有机会的话，倒是可以沿着这条思路继续做一下。\n",
    "\n",
    "假设继续用当前这个预测模型，还有哪里可以优化呢？一是不同人的**friends**数量差异太大，有人的**friends**多达238749个，真正找出这么多人的直接tag或者间接tag是不划算的，所以可以考虑随机采样，对**friends**数量少于1000人的，全部**friends**都纳入计算，对**friends**多于1000人的，随机采样1000个人，这样可以大大减少计算负担，也减少内存的占用。二是数据精度的要求可以降低，在采取了第一条的措施之后，1000个人的tag求和最多也就到1000，这样的话np.int16就够用了，而目前是int32，还可以再节省一半的内存。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "bcdb759d-bdd6-42e1-b3af-a5fc7f202d39",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "238749"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max(data.friendsCount)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "eb17d3f6-f3e1-4d02-84f7-2a95d1d45c63",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
